---
title: 信息系统开发方法
description: 和软件过程模型有点类似，比如结构化开发方法就跟瀑布模型有点类似，还有原型化方法
---


## 结构化开发方法

* 结构是指系统内各个组成要素之间的相互联系、相互作用的框架。
* 结构化方法也称为生命周期法，是一种传统的信息系统开发方法，<RedSpan>由结构化分析（Structured Analysis，SA）、结构化设计（Structured Design，SD）和 结构化程序设计（Structured Programming，SP）</RedSpan>三部分有机组合而成，其精髓是自顶向下、逐步求精和模块化设计。
:::tip
自顶向下就是从系统规划、系统分析、系统设计、系统实施、系统运行和维护一步一步来。
:::

* 结构化方法的主要特点
    * <RedSpan>开发目标清晰化</RedSpan>：结构化方法的系统开发遵循”<RedSpan>用户第一</RedSpan>“ 的原则。
    * <RedSpan>开发工作阶段化</RedSpan>：每个阶段工作完成后，要 <RedSpan>根据阶段工作和要求进行审查</RedSpan>，这使得各阶段工作有条不紊地进行，便于项目管理和控制。
    * <RedSpan>开发文档规范化</RedSpan>：结构化方法每个阶段工作完成后，要 <RedSpan>按照要求完成相应的文档</RedSpan>，以保证各个工作阶段的衔接与系统维护工作的便利。
    * <RedSpan>设计方法结构化</RedSpan>：在 <RedSpan>系统分析和设计时</RedSpan>，从整体和全局考虑，<RedSpan>自顶向下地分解</RedSpan>；在 <RedSpan>系统实现</RedSpan> 时，根据设计的要求，先编写各个具体的功能模块，然后 <RedSpan>自底向上逐步实现整个系统</RedSpan>。
* 结构化方法的不足和局限
    * <RedSpan>开发周期长</RedSpan>：按顺序经历各个阶段，直到实施阶段结束后，用户才能使用系统。
    * <RedSpan>难以适应需求的变化</RedSpan>：不适用于需求不明确或经常变更的项目。
    * <RedSpan>很少考虑数据结构</RedSpan>: 结构化方法是一种面向过程，面向数据流的开发方法，很少考虑数据结构。
* 结构化方法常用工具：结构化方法一般利用图形表达用户需求，常用工具有 <RedSpan> 数据流图、数据字典、结构化语言、判定表以及判定树等。</RedSpan>

## 面向对象开发方法
* 面向对象（Object-Oriented，OO）方法认为，客观世界是由各种对象组成的，<RedSpan>任何事物都是对象，每一个对象都有自己的运动规律和内部状态，都属于某个对象类</RedSpan>，是该对象类的一个元素。复杂的对象可由相对简单的各种对象以某种方式而构成，不同对象的组合及相互作用就构成了系统。
* 面向对象方法的特点
    * 使用 OO 方法构造的系统具有<RedSpan>更好的复用性</RedSpan>，其关键在于建立一个全面、合理、统一的模型（<RedSpan>用例模型和分析模型</RedSpan>）。
    * OO 方法也划分阶段，但其中的系统分析、系统设计、系统实现三个阶段之间已经<RedSpan>没有缝隙</RedSpan>。也就是说，这三个阶段的界限变得不明确，某项工作既可以在前一个阶段完成，也可以在后一个阶段完成；前一个阶段工作做得不够细，在后一个阶段可以补充。
    * 面向对象方法可以普<RedSpan>遍适用于各类信息系统的开发</RedSpan>。

* 面向对象方法的不足之处：<RedSpan>必须依靠一定的面向对象技术支持，在大型项目的开发上具有一定的局限性，不能涉足系统分析以前的开发环节</RedSpan>。

* 当然，一些大型信息系统的开发，通常是将 <RedSpan>结构化方法和OO方法结合起来</RedSpan>。首先使用结构化方法进行自顶向下的整体划分；然后，自底向上地采用 OO 方法进行开发。因此，结构化方法和 OO 方法仍是两种在系统开发领域相互依存的，不可替代的方法。

## 原型化方法

```mermaid
graph TD;
    A[确定用户基本需求] --> B(设计系统初始原型);
    B --> C(试用和评价原型);
    C --> D{是否满意};
    D -->|否| E(修改和完善原型);
    D -->|是| F("整理原型、提供文档");
    E --> C
```

:::tip
原型化方法适用于需求不明确的情况。
:::

* 原型化方法也称为 <RedSpan>快速原型法</RedSpan>，或者简称为原型法。它是一种根据用户初步需求，利用系统开发工具，<RedSpan>快速地建立一个系统模型展示用户</RedSpan>，在此基础上与用户交流，最终实现用户需求的信息系统快速开发的方法。
* 按 <RedSpan>是否实现功能</RedSpan>分类：分为水平原型（行为原型、功能的导航）、垂直原型（结构化原型，实现了部分功能）。
* 按 <RedSpan>最终结果</RedSpan>分类：分为抛弃式原型、演化式原型。


* 原型法的特点
    * 原型法可以 <RedSpan>使系统开发的周期缩短、成本和风险降低、速度加快，获得较高的综合开发效益</RedSpan>。
    * 原型法是<RedSpan>以用户为中心</RedSpan>来开发系统的，用户参会的程度大大提高，开发的系统符合用户的需求，因而增加了系统的满意度，提高了系统开发的成功率。
    * 由于用户参与了系统开发的全流程，对 <RedSpan>系统的功能和结构容易理解和接受</RedSpan>，有利系统的移交，有利于系统的运行与维护。
* 原型法的不足之处：<RedSpan> 开发的环境要求高。管理水平要求高</RedSpan> 。
* 由以上的分析可以看出，原型法的<RedSpan>优点主要在于能更有效地确认用户需求</RedSpan>。从直观上来看，原型法<RedSpan>适用于那些需求不明确的系统开发</RedSpan>。事实上，对于<RedSpan>分析层面难度大、技术层面难度不大的系统</RedSpan>,适用于原型法开发。
* 从严格意义上来说，目前的原型法 <RedSpan>不是一种独立的系统开发方法，而只是一种开发思想</RedSpan>，它支持在系统开发早期阶段快速生成系统的原型，没有规定在原型构建过程中必须使用那种方法。因此，它 <RedSpan>不是完整意义上的方法论体系</RedSpan>。这就注定了 <RedSpan>原型法必须与其它信息系统开发方法结合使用</RedSpan>。

:::tip
原型法主要是运用在系统分析阶段；结构化和面向对象方法可以运用在三个阶段（分析阶段、设计阶段、实施阶段）。
所以原型化方法必须与其它信息系统开发方法结合使用。
:::

## 敏捷开发
<Image align="center" width={'200'} src={'https://wkq-img.oss-cn-chengdu.aliyuncs.com/img/202410011040769.png'}></Image>
* 敏捷开发是一种<RedSpan>以人为核心、迭代、循序渐进的开发方法</RedSpan>，相对于传统软件开发方法的非敏捷，更 <RedSpan>强调程序员团队与业务专家之间的紧密协作、面对面的沟通(认为比书面的文档更有效)、频繁交付新的软件版本</RedSpan>、紧密而自我组织型的团队、<RedSpan>能够很好地适应需求变化的代码编写和团队组织方法，也更注重软件开发中</RedSpan>

* 敏捷软件开发宣言
    * 个体和交互胜过过程和工具
    * 可以工作的软件胜过面面俱到的文档
    * 客户合作胜过合同谈判
    * 响应变化胜过遵循计划

* 结对编程：<RedSpan>一个程序员开发，另一个程序员在一旁观察审查代码</RedSpan>，能够有效的提高代码质量，在开发同时对代码进行初步审查，共同对代码负责。
* 自适应开发：强调开发方法的<RedSpan>适应性（Adaptive）</RedSpan>。不像其它方法那样有很多具体的实践做法，它更<RedSpan>侧重为软件的重要性提供最根本的基础</RedSpan>，并从更高的组织和管理层次来阐述开发方法为什么要具备适应性。
* 水晶方法：<RedSpan>每一个不同的项目都需要一套不同的策略、约定和方法论</RedSpan>。
* 特性驱动开发：是一套 <RedSpan>针对中小型软件开发项目的开发模式</RedSpan>。是一个<RedSpan>模型驱动的快速迭代开发过程</RedSpan>，它强调的是简化、使用、易于被开发团队接受，适用于需求经常变动的项目。
* 极限编程XP：核心是 <RedSpan>沟通、简明、反馈和勇气</RedSpan>，因为知道计划永远赶不上变化，XP <RedSpan>无需开发人员在软件开始初期做出很多的文档</RedSpan>。XP 提倡 <RedSpan>测试先行</RedSpan>，为了将以后出现 bug 的几率降到最低。
* 并列争球法 SCRUM： 是一种 <RedSpan>迭代的增量化过程</RedSpan>，把 <RedSpan>每段时间（30天）一次的迭代称为一个冲刺</RedSpan>，并按照需求的优先级别来实现产品，多个自组织和自治的小组并行地递增实现产品。

:::tip
针对中小型项目，使用敏捷开发会更快一些；大型复杂高风险项目，流程不能少，如果只使用敏捷开发，可能会失败。
:::
## 统一过程（RUP）
提供了在开发组织中<RedSpan>分派任务和责任的纪律化方法</RedSpan>。它的目标是在 <RedSpan>可预见的日程和预算前提下，确保满足最终用户需求的高质量产品</RedSpan>。

* **3 个显著特点**：<RedSpan>用例驱动、以架构为中心、迭代和增量</RedSpan>。
* **4 个流程**，<RedSpan>初始阶段、细化阶段、构建阶段和交付阶段</RedSpan>。每个阶段结束时都要安排一次技术评审，以确定这个阶段的目的是否已经达到。
* 适用：一个 <RedSpan>通用过程框架</RedSpan> ，可以用于种类广泛的软件系统、不同的应用领域、不同的组织类型、不同性能水平和不同的项目规模。

